Databases often contain large numbers of vitally important records for a company. These records can include human resource, corporate, financial, legal, medical, and other records. During the course of business, database users need to access the database to read or modify records. In a company with many database users, it may be a regular occurrence for multiple database users to access the database at the same time. If multiple database transactions occur concurrently, the database must be designed such that each database user has a consistent view of the database during their transaction and that the final status of the database is the same as if the transactions had occurred one after the other. Two typical ways of accomplishing these goals are 1) by preventing database users from accessing the same parts of the database at the same time, and 2) by keeping separate versions of a file for each database user acting on it concurrently and constructing the final version of the file when all of the concurrent transactions are completed. The first way leads to only limited concurrency and wastes users' time waiting for other transactions to complete, whereas the second way leads to the technically complicated process of constructing a file from several concurrently modified versions.